package com.yupi.yuaicodemother.ai.rag;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * PromptEnhancer 类用于增强原始的提示信息，通过结合相关的 Java 开发规范，
 * 生成一个包含开发规范和原始需求的新提示信息，帮助开发者更好地遵循规范完成代码编写。
 * 该类作为 Spring 组件，使用依赖注入的方式获取 ManualRetriever 实例。
 */
@Component
@RequiredArgsConstructor
public class PromptEnhancer {

    /**
     * 手动检索器实例，用于查找与原始提示相关的 Java 开发规范片段。
     * 通过构造函数注入，确保该类能够获取相关的开发规范。
     */
    private final ManualRetriever retriever;

    /**
     * 增强原始提示信息，将检索到的相关 Java 开发规范添加到提示信息中。
     * 
     * @param originalPrompt 原始的需求提示信息
     * @return 增强后的提示信息，包含相关的 Java 开发规范和原始需求
     */
    public String enhance(String originalPrompt) {
        // 调用检索器，查找与原始提示相关的 3 条开发规范片段
        List<String> snippets = retriever.findRelevant(originalPrompt, 3);
        // 使用 StringBuilder 构建最终的提示信息，提高字符串拼接效率
        StringBuilder sb = new StringBuilder();
        // 添加提示开头，告知用户接下来的内容是相关的 Java 开发规范
        sb.append("以下 Java 开发规范可能与你即将编写的代码有关，请严格遵守：\n");
        // 遍历检索到的开发规范片段，逐条添加到提示信息中
        snippets.forEach(s -> sb.append("【规范】").append(s).append("\n"));
        // 添加分隔线，将开发规范和原始需求分隔开
        sb.append("\n---\n现在请你基于以上规范，继续完成需求：\n");
        // 添加原始需求提示信息
        sb.append(originalPrompt);
        // 返回最终构建好的增强提示信息
        return sb.toString();
    }
}